問題解説: 永遠の国 第一のトラブル

こんにちは。この記事では第8回で出題された永遠の国 第一のトラブルを解説します。

この問題はdockerのimageをpullする時にバージョンを指定しないことによるバージョントラブル、及びdocker構築の際のトラブルとなっております。

以下からが問題の解説です。

問題内容

この問題では、もともと動かしていた環境からそのままdockerに移行した際におこる様々なトラブルを出題しました。

まず、dockerのimageをpullする際にバージョンを指定しなかったため、php-fpmのバージョンが7(競技時)で実行されています。

そのため5.xで書かれたコードに対して7のバージョンで実行されるため、想定道理の動作をしないトラブルが発生します。

また、php-fpmのコンテナのデフォルトではMySQLのプラグインがインストールされていないため、PDO_MySQL,MySQLiを使用したコードが実行できません。

さらにMySQLのコンテナが立ち上がった時に自動実行されるフォルダに入れられたスクリプトに不備があり、スクリプトが正しく実行されずにコンテナが異常終了します。

以下は出題された際の問題文です。

問題文

エイトの知り合いのエルフの長が住んでいる村を訪れた。すると奥から困り顔のエルフを連れた長が現れ、あなたたちを出迎えた。

エルフの長「久しぶりじゃな、エイト。よく来てくれた。来て早々じゃがお前たちに頼みがある! ここに今悩みを抱えている友人がいるんじゃ…… こやつを助けてやってほしい」

困っているエルフ「ECサイトのシステムをリニューアルしようと思ってDockerを詠唱したら失敗しちゃったんです……。何とかしてくれませんか?」

エイト「システムをDocker上で動かすことにしたけど、上手くできてないから動くようにしてってことね。頑張ってね!」

注意事項

  • 完成図通りに表示させること。
  • mysqlコンテナは立ち上がってから処理があるので数分お待ち下さい。

達成すべき事項

  • Webページが表示される。
  • レイアウトが完成の表示例と一致している。

採点基準

  • PHPコンテナでPDO_MySQLのパッケージが入っていないため文章が実行出来ない(15%)
  • MySQLのマイグレーションスクリプトの最後のヒアドキュメントが記述されていない(15%)
  • php-fpm側でhtmlファイルをマウントしてない(15%)
  • nginx.confのphpコンテナまでのリンクがlocalhost:9000になっている(15%)
  • phpのループで使われている16進数表記の変数を10進数に直す(30%)

解答例

  • PHPのDockerfileにPDO_MySQLを追加するために
    RUN /usr/local/bin/docker-php-ext-install pdo_mysqlを追加する。
  • MySQLコンテナのマイグレーションスクリプトを実行させるために
    マイグレーションスクリプトの最後にヒアドキュメントのEOFを追記する。
  • phpコンテナにhtmlファイルを設置するためにdocker-compose.ymlの中のphpの部分に
    volumes:
    -/html/var/www/html/
  • mysqlのcommandの部分に
    を挿入する。
  • ./html/index.php
    <?php if($i == "0x6")break; ?>
    <?php if($i == "6")break; ?>に変える
    同様に”0x3″,”0x9″も変更する。

講評

永遠の国第一のトラブルを解けていたチームは10チームでした。

修正の作業量が多かったためか1日目では半数も解けておらず、1問目にしては難易度が高かったのかなと思いました。